// 下面打印出来的是什么
// example 1
var a={}, b='123', c=123;  
a[b]='b';
a[c]='c';  
console.log(a[b]);

// ---------------------
// example 2
 a={}, b=Symbol('123'), c=Symbol('123');  
a[b]='b';
a[c]='c';  
console.log(a[b]);

// ---------------------
// example 3
 a={}, b={key:'123'}, c={key:'456'};  
a[b]='b';
a[c]='c';  
console.log(a[b]);


/**
 * 输出:
 * example1
 * a[b] = 'c'
 * -----------
 * example2
 * a[b] = 'b'
 * -----------
 * example3
 * a[b] = 'c'
 * */ 

/**
 * why
 * 这题考察的是对象的键名的转换。
 * 对象的键名只能是字符串和 Symbol 类型。
 * 其他类型的键名会被转换成字符串类型，对象转字符串默认会调用 toString 方法。
 * 
 * 题目来源 [https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/125]
 * 
 * 因此：
 * example1 的 a[b] 实际上是 a['123'] = 'c'
 * example1 的 b 和 c 是两个不同的symbol, 所有，a[b]='b';
 * example1 的 b 和 c 都是 object ,会转化为 a['object'], 后面的会覆盖前面的，所以，a['object'] = 'c'
 * */ 